home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_12_07 / plauger / isgline.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-05-03  |  765 b   |  39 lines

  1. // isgline -- istream::getline(char *, int, char)
  2. #include <istream>
  3.  
  4. istream& istream::getline(char *s, int n, char delim)
  5.     {    // get up through delimiter or count
  6.     _Bool copied = 0;
  7.     _Chcount = 0;
  8.     _TRY_IO_BEGIN
  9.     if (ipfx(1) && 0 < n)
  10.         {    // extract arbitrary characters
  11.         int ch;
  12.         for (; ; )
  13.             if (--n <= 0)
  14.                 {    // record count failure and quit
  15.                 setstate(failbit);
  16.                 break;
  17.                 }
  18.             else if ((ch = rdbuf()->sbumpc()) == EOF)
  19.                 {    // record eof and quit
  20.                 setstate(eofbit);
  21.                 break;
  22.                 }
  23.             else
  24.                 {    // count it and test for delim
  25.                 ++_Chcount;
  26.                 if (ch == delim)
  27.                     break;
  28.                 *s++ = ch, copied = 1;
  29.                 }
  30.         }
  31.     if (!copied)
  32.         setstate(failbit);
  33.     *s = '\0';
  34.     isfx();
  35.     _CATCH_IO_END
  36.     return (*this);
  37.     }
  38.  
  39.